package cn.dida.service;

import java.util.List;

import cn.dida.model.*;
import cn.dida.model.LgsBillsProduct;

/**
 * <p>物流单据 接口</p>
 * @auther lisha
 * @date 2017-2-9 13:59:48
 */
public interface LgsBillService {
	
	/**
	 * 创建单据
	 * @param lgsBills 单据实体类
	 * @return 返回受影响的记录行数
	 * @date 2017-2-9 14:00
	 */
	public Boolean insertLgsBills (LgsBills lgsBills);
	/**
	 * 单据列表
	 * @param companyId 公司id
	 * @param productName 产品名称
	 * @param billsNo 单据号
	 * @param billsType 单据类型
	 * @param node 节点
	 * @param nubsS 应扫数量（小）
	 * @param nubsE 应扫数量（大）
	 * @param from 发货地点
	 * @param to 收货地点
	 * @param cTimeS 操作时间（开始）
	 * @param cTimeE 操作时间 （结束）
	 * @param sta 状态，1初始创建，2使用中，3完成，4封存
	 * @param page 分页游标
	 * @return Pageable<LgsBills>单据分页列表
	 * @date 2017-2-9 14:01
	 */
	public Pageable<LgsBills> query (Integer companyId, String productName,
									 String billsNo, Integer billsType, Integer node, Integer nubsS,
									 Integer nubsE,Integer scanNubsS, Integer scanNubsE, Integer from, Integer to,Integer depotScan, String cTimeS,
									 String cTimeE, Integer sta, int page);

	/**
	 * 数据导出
	 * @param companyId
	 * @param productName
	 * @param billsNo
	 * @param billsType
	 * @param node
	 * @param nubsS
	 * @param nubsE
	 * @param from
	 * @param to
	 * @param depotScan
	 * @param cTimeS
	 * @param cTimeE
	 * @param sta
	 * @return
	 */
	public List<LgsBills> queryForExport (Integer companyId, String productName, String billsNo, Integer billsType, Integer node,
										  Integer scanNubsS, Integer scanNubsE,Integer nubsS, Integer nubsE,
										  Integer from, Integer to,Integer depotScan, String cTimeS, String cTimeE, Integer sta);

	/**
	 * 根据id查询单个单据
	 * @param id 节点id
	 * @param companyId 公司id
	 * @return 单个节点
	 * @date 2017-2-9 14:01
	 */
	public LgsBills getLgsBillById (int id, int companyId);
	
	/**
	 * 根据单据id获取关联的产品
	 * @param billId 单据id
	 * @return List<LgsBillsProduct> 单据关联的产品列表
	 * @date 2017-2-9 14:02
	 */
	public List<LgsBillsProduct> getProductByBillId (int billId);
	
	/**
	 * 判断单据是否已存在
	 * @param companyId 公司id
	 * @param billNo 单据号
	 * @return boolean true存在，false不存在
	 * @date 2017-2-9 14:13
	 */
    public boolean isExistsBillNo(Integer companyId, String billNo,Integer type);
    /**
     * 作废单据
     * @param companyId 公司id
     * @param id 单据id
     * @date 2017-2-9 14:24
     */
    public boolean billInvalid(Integer companyId, int id);



	/**
	 * 根据公司id 获取公司erp_code
	 * @param companyId
	 * @return
	 */
	public String getComanyErpCode(Integer companyId);
    
    /**
     * 获取地点列表
     * @param companyId 公司id
     * @param sta 是否可用，1可用，0屏蔽
     * @return List<LgsDepot> 地点列表
     * @date 2017-02-13 15:17
     */
    public List<LgsDepot> getDepotList(Integer companyId, Integer sta);

	/**
	 * 获取同一公司下状态正常的 客户对象（收发货对象用）
	 * @param companyId
	 * @param state
	 * @return
	 */
	public List<LgsCust> getCustList(Integer companyId, Integer state);

	/**
	 * 根据输入收/发对象名称或编码  获取列表
	 * @param keyword
	 * @param limit
	 * @param companyId
	 * @return
	 */
	public List<LgsCust> getCustSearchList(String keyword, Integer limit,Integer companyId);

    
    /**
	 * 瓶数、箱数合计
	 * @param billId 单据id
	 * @return
	 * @date 2017-2-14 13:33
	 */
	public LgsBillsProduct getTotalNubsByBillId (int billId);
	/**
	 * 修改单据
	 * @param lgsBills 单据实体类
	 * @return 返回受影响的记录行数
	 * @date 2017-2-14 15:04
	 */
	public boolean updateBills (LgsBills lgsBills) ;
	
	/**
     * 扫码管理-> 明细列表
     * @param billId 单据id
     * @param companyId 公司id
     * @param batchNub 批次号
     * @param qrcodeBoxId 箱码
     * @param qrcodeBottleId 瓶码
     * @param page 分页游标
     * @return Pageable<LgsLogPdaScan> 明细分页列表
     * @date 2017-2-14 17:10
     */
    public Pageable<LgsLogPdaScan> queryBillsDetail (String billId, Integer companyId, String batchNub, String qrcodeBoxId, String qrcodeBottleId, int page);
}
